<?php
require_once '../beans/pedido.php';
require_once '../beans/cliente.php';
require_once '../beans/moneda.php';
require_once '../beans/item.php';
require_once '../beans/articulo.php';
require_once '../beans/producto.php';
require_once '../beans/proveedor.php';

require_once 'clienteControlador.php';
require_once 'monedaControlador.php';
require_once 'alertaControlador.php';
require_once 'clienteControlador.php';
require_once 'monedaControlador.php';
require_once 'articuloControlador.php';
require_once 'proveedorControlador.php';

require_once '../ORM/ORMTransac.php';
require_once '../ORM/ORMPedido.php';

require_once '../session.php';

if(!empty($_POST)) {
    switch($_POST['accion']) {
        case 'crearPedido':
            $idPedido = filter_input(INPUT_POST, 'idPedido', FILTER_SANITIZE_NUMBER_INT);
            $cliente = filter_input(INPUT_POST, 'cliente', FILTER_SANITIZE_STRING);
            $ordenDeCompra = filter_input(INPUT_POST, 'ordenDeCompra', FILTER_SANITIZE_STRING);
            $idMoneda = filter_input(INPUT_POST, 'idMoneda', FILTER_SANITIZE_NUMBER_INT);
            crearPedido($idPedido, $cliente, $ordenDeCompra, $idMoneda);
            break;
        case 'agregarItem':
            $cantidad = filter_input(INPUT_POST, 'cantidad', FILTER_SANITIZE_NUMBER_INT);
            $tempid = filter_input(INPUT_POST, 'tempid', FILTER_SANITIZE_NUMBER_INT);
            $codigo = filter_input(INPUT_POST, 'articulo', FILTER_SANITIZE_STRING);
            $idMarca = filter_input(INPUT_POST, 'idMarca', FILTER_SANITIZE_NUMBER_INT);
            $precio = filter_input(INPUT_POST, 'precio', FILTER_SANITIZE_STRING);
            $fecha = filter_input(INPUT_POST, 'fecha', FILTER_SANITIZE_STRING);
            $proveedor = filter_input(INPUT_POST, 'proveedor', FILTER_SANITIZE_STRING);
            agregarItem($tempid, $cantidad, $codigo, $idMarca, $precio, $fecha, $proveedor);
            break;
        case 'eliminarItem':
            $idItem = filter_input(INPUT_POST, 'idItem', FILTER_SANITIZE_NUMBER_INT);
            $tempid = filter_input(INPUT_POST, 'tempid', FILTER_SANITIZE_NUMBER_INT);
            eliminarItem($idItem, $tempid);
            break;
        case 'editarItem':
            $idItem = filter_input(INPUT_POST, 'idItem', FILTER_SANITIZE_NUMBER_INT);
            $tempid = filter_input(INPUT_POST, 'tempid', FILTER_SANITIZE_NUMBER_INT);
            editarItem($idItem, $tempid);
            break;
        case 'guardarPedido':
            $tempid = filter_input(INPUT_POST, 'tempid', FILTER_SANITIZE_NUMBER_INT);
            guardarPedido($tempid);
            break;
        case 'getPedidosEnMemoria':
            getPedidosEnMemoria();
            break;
        case 'eliminarPedidoEnMemoria':
            $id = filter_input(INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT);
            eliminarPedidoEnMemoria($id);
            break;
        case 'modificarItem':
            $idItem = filter_input(INPUT_POST, 'idItem', FILTER_SANITIZE_NUMBER_INT);
            $tempid = filter_input(INPUT_POST, 'tempid', FILTER_SANITIZE_NUMBER_INT);
            $cantidad = filter_input(INPUT_POST, 'cantidad', FILTER_SANITIZE_NUMBER_INT);
            $codigo = filter_input(INPUT_POST, 'articulo', FILTER_SANITIZE_STRING);
            $idMarca = filter_input(INPUT_POST, 'idMarca', FILTER_SANITIZE_NUMBER_INT);
            $precio = filter_input(INPUT_POST, 'precio', FILTER_SANITIZE_STRING);
            $fecha = filter_input(INPUT_POST, 'fecha', FILTER_SANITIZE_STRING);
            $proveedor = filter_input(INPUT_POST, 'proveedor', FILTER_SANITIZE_STRING);
            modificarItem($idItem, $tempid, $cantidad, $codigo, $idMarca, $precio, $fecha, $proveedor);
            break;
        case 'getPedidosPendientes':
            getPedidosPendientes();
            break;
        case 'getPedidosPendientesVencidos':
            getPedidosPendientesConItemsVencidos();
            break;
        case 'getPedidosPorProveedor':
            getPedidosPorProveedor();
            break;
    }
}

function guardarPedido($tempid) {
    $pedido = $_SESSION['pedidos'][$tempid];
    $estado = true;
    
    $numero = $pedido->getNumero();
    $idCliente = $pedido->getCliente()->getIdCliente();
    $orden = $pedido->getOrdenDeCompra();
    $idMoneda = $pedido->getMoneda()->getIdMoneda();
    
    
    if(ORMExistePedido($numero)) {
        echo "<div class='alert alert-error'><b>Alerta !</b><br />El n&uacute;mero de pedido ya existe.</div>";
        $estado = false;
        exit(0);
    }
    
    ORMBeginTransac();
    $idPedido = ORMAgregarPedido($numero, $idCliente, $orden, $idMoneda);
    
    if(!$idPedido) {
        $estado = false;
    }
   
    $items = $pedido->getItems();
    
    foreach ($items as $key => $value) {
        if(!ORMAgregarItemAlPedido($value->getCantidad(), $value->getArticulo()->getIdArticulo(), $value->getPrecio(), $value->getFechaEntrega(), $value->getProveedor()->getIdProveedor(), $idPedido)) {
            $estado = false;
        }
    }
    
    
    if($estado) {
        ORMCommit();
        unset($_SESSION['pedidos'][$tempid]);
        ?>
<script type="text/javascript">
    $(document).ready(function() {
        $("#contenedor-izquierda").html('');
        $("#contenedor-derecha").html('');
        cargarContenido(28);
    });
</script>
        <?php
    } else {
        ORMRollback();
    }
    
     
}

function eliminarItem($idItem, $tempid) {
    
    unset($_SESSION['pedidos'][$tempid]->items[$idItem]);
?>
<script type="text/javascript">
    $(document).ready(function() {
        $("#contenedor-izquierda").load('vistas/pedido/vistaIzquierda.php?time=<?php echo $tempid; ?>');
    });
</script>
<?php
}

function editarItem($idItem, $tempid) {
    
?>
<script type="text/javascript">
    $(document).ready(function() {
        $("#contenedor-derecha").load('vistas/pedido/modificaItems.php?time=<?php echo $tempid; ?>&idItem=<?php echo $idItem; ?>');
    });
</script>
<?php
}

function agregarItem($tempid, $cantidad, $codigo, $idMarca, $precio, $fecha, $proveedor) {
    $estado = true;
    
    if(is_numeric($cantidad)) {
        ok("#resultadoCantidad");
    } else {
        alerta("#resultadoCantidad", "Debe ingresar una cantidad v&aacute;lida.");
        $estado = false;
    }
    
    if(existeArticulo($codigo, $idMarca)) {
        ok("#resultadoArticulo");
    } else {
        alerta("#resultadoArticulo", "El art&iacute;culo no existe.");
        $estado = false;
    }
    
    if(is_numeric($precio)) {
        if($precio > 0) {
            ok("#resultadoPrecio");
        } else {
            alerta("#resultadoPrecio", "El valor debe ser mayor a 0.");
            $estado = false;
        }
    } else {
        alerta("#resultadoPrecio", "Debe ingresar un valor num&eacute;rico.");
        $estado = false;
    }
    
    if($proveedor == "") {
        ok("#resultadoProveedor");
    } else {
        if(existeProveedor($proveedor)) {
            ok("#resultadoProveedor");
        } else {
            alerta("#resultadoProveedor", "El proveedor no existe.");
            $estado = false;
        }
    }
    
    if($estado) {
        $item = new item();
        
        $item->setCantidad($cantidad);
        $articulo = getArticuloPorCodigoYMarca($codigo, $idMarca);
        $item->setArticulo($articulo);
        $item->setPrecio($precio);
        $item->setFechaEntrega($fecha);
        $proveedor = getProveedorPorNombre($proveedor);
        $item->setProveedor($proveedor);
        
        
        $pedido = $_SESSION['pedidos'][$tempid];
        $pedido->addItem($item);
        $_SESSION['pedidos'][$tempid] = $pedido;
        
        ?>
<script type="text/javascript">
    $(document).ready(function() {
        $("#contenedor-izquierda").load('vistas/pedido/vistaIzquierda.php?time=<?php echo $tempid; ?>');
        $("#contenedor-derecha").load('vistas/pedido/altaItems.php?time=<?php echo $tempid; ?>');
    });
</script>
        <?php
    }
    
}

function crearPedido($idPedido, $cliente, $ordenDeCompra, $idMoneda) {
    
    
    if(existeCliente($cliente)) {
        $pedido = new pedido();
    
        $pedido->setNumero($idPedido);

        $cl = getCliente($cliente);
        $pedido->setCliente($cl);

        $pedido->setOrdenDeCompra($ordenDeCompra);

        $moneda = getMoneda($idMoneda);
        $pedido->setMoneda($moneda);

        $time = time();
        $_SESSION['pedidos'][$time] = $pedido;

    ?>
<script type="text/javascript">
    $(document).ready(function() {
        $("#contenedor-izquierda").load('vistas/pedido/vistaIzquierda.php?time='+'<?php echo $time; ?>');
        $("#contenedor-derecha").load('vistas/pedido/altaItems.php?time='+'<?php echo $time; ?>');
    });
</script>
<?php
    } else {
        alerta("#resultadoCliente", "Debe ingresar un cliente v&aacute;lido.");
    }
} 

function getItemPedidoPorId($idItemPedido) {
    $item = new item();
    
    $item->setIdItemPedido($idItemPedido);
    $item->setCantidad(ORMGetCampoDeItemPedidoPorId('cantidad', $idItemPedido));
    $item->setArticulo(getArticuloPorId(ORMGetCampoDeItemPedidoPorId('idArticulo', $idItemPedido)));
    $item->setPrecio(ORMGetCampoDeItemPedidoPorId('precio', $idItemPedido));
    $item->setFechaEntrega(ORMGetCampoDeItemPedidoPorId('fechaEntrega', $idItemPedido));
    $item->setProveedor(getProveedorPorId(ORMGetCampoDeItemPedidoPorId('idProveedor', $idItemPedido)));
    $item->setIdOrdenDeCompra(ORMGetCampoDeItemPedidoPorId('idOrdenDeCompra', $idItemPedido));
    
    return $item;
}

function getPedidoPorId($idPedido) {
    $pedido = new pedido();
    
    $pedido->setNumero($idPedido);
    $pedido->setCliente(getClientePorId(ORMGetCampoDePedidoPorId('idCliente', $idPedido)));
    $pedido->setOrdenDeCompra(ORMGetCampoDePedidoPorId('ordenDeCompra', $idPedido));
    $pedido->setMoneda(getMoneda(ORMGetCampoDePedidoPorId('idMoneda', $idPedido)));
    
    $idItems = ORMGetIdItemsPedidoPorIdPedido($idPedido);
    
    foreach ($idItems as $key => $value) {
        $item = getItemPedidoPorId($value);
        $pedido->addItem($item);
    }
    
    return $pedido;
}

function getPedidosEnMemoria() {
    $value = new pedido();
    if(count($_SESSION['pedidos']) > 0) {
        $pedidos = $_SESSION['pedidos'];
        echo "<table class='table table-striped'>";
        echo "<thead><tr>";
        
        echo "<th>#</th>";
        echo "<th>Cliente</th>";
        echo "<th>Orden de Compra</th>";
        echo "<th>Moneda</th>";
        
        echo "</tr></thead>";
        echo "<tbody>";
        foreach ($pedidos as $key => $value) {
            echo "<tr>";
            
            echo "<td>".$value->getNumero()."</td>";
            echo "<td>".$value->getCliente()->getNombre()."</td>";
            echo "<td>".$value->getOrdenDeCompra()."</td>";
            echo "<td>".$value->getMoneda()->getMoneda()."</td>";
            echo "<td><a href='#' onclick='editarPedidoEnMemoria($key)'><i title='Editar' class='icon-edit'></i></a></td>";
            echo "<td><a href='#' onclick='eliminarPedidoEnMemoria($key)'><i title='Eliminar' class='icon-remove'></i></a></td>";
            
            echo "</tr>";
        }
        echo "</tbody>";
        echo "</table>";
    } else {
        echo "<div class='alert alert-error'><b>Alerta !</b><br />No hay pedidos en memoria.</div>";
    }
    
}

function eliminarPedidoEnMemoria($id) {
    unset($_SESSION['pedidos'][$id]);
}

function modificarItem($idItem, $tempid, $cantidad, $codigo, $idMarca, $precio, $fecha, $proveedor) {
    $estado = true;
    
    if(is_numeric($cantidad)) {
        ok("#resultadoCantidad");
    } else {
        alerta("#resultadoCantidad", "Debe ingresar una cantidad v&aacute;lida.");
        $estado = false;
    }
    
    if(existeArticulo($codigo, $idMarca)) {
        ok("#resultadoArticulo");
    } else {
        alerta("#resultadoArticulo", "El art&iacute;culo no existe.");
        $estado = false;
    }
    
    if(is_numeric($precio)) {
        if($precio > 0) {
            ok("#resultadoPrecio");
        } else {
            alerta("#resultadoPrecio", "El valor debe ser mayor a 0.");
            $estado = false;
        }
    } else {
        alerta("#resultadoPrecio", "Debe ingresar un valor num&eacute;rico.");
        $estado = false;
    }
    
    if($proveedor == "") {
        ok("#resultadoProveedor");
    } else {
        if(existeProveedor($proveedor)) {
            ok("#resultadoProveedor");
        } else {
            alerta("#resultadoProveedor", "El proveedor no existe.");
            $estado = false;
        }
    }
    
    if($estado) {
        $item = new item();
        
        $item->setCantidad($cantidad);
        $articulo = getArticuloPorCodigoYMarca($codigo, $idMarca);
        $item->setArticulo($articulo);
        $item->setPrecio($precio);
        $item->setFechaEntrega($fecha);
        $proveedor = getProveedorPorNombre($proveedor);
        $item->setProveedor($proveedor);
        
        
        $pedido = $_SESSION['pedidos'][$tempid];
        $pedido->items[$idItem] = $item;
        $_SESSION['pedidos'][$tempid] = $pedido;
        
        ?>
<script type="text/javascript">
    $(document).ready(function() {
        $("#contenedor-izquierda").load('vistas/pedido/vistaIzquierda.php?time=<?php echo $tempid; ?>');
        $("#contenedor-derecha").load('vistas/pedido/altaItems.php?time=<?php echo $tempid; ?>');
    });
</script>
        <?php
    }
}
        
function getPedidosPendientes() {
    $idPedidos = ORMGetIdPedidosConItemsPendientes();
    
    $pedidos = array();
    foreach ($idPedidos as $key => $value) {
        $pedidos[] = getPedidoPorId($value);
    }
    echo "<table class='table table-condensed'>\n";
    foreach ($pedidos as $key => $value) {
        echo "<tr class='success'>\n";
        echo "<td><b>".$value->getNumero()."</b></td>\n";
        echo "<td><b>".$value->getCliente()->getNombre()."</b></td>\n";
        echo "<td><b>O/C: ".$value->getOrdenDeCompra()."</b></td>\n";
        echo "<td><b></b></td>\n";
        echo "<td><b>".$value->getMoneda()->getMoneda()."</b></td>\n";
        echo "<td><b></b></td>\n";
        echo "</tr>\n";
        
        $items = $value->getItems();
        
        foreach ($items as $key2 => $value2) {
            if($value2->getIdOrdenDeCompra() == 0) {
                if(strtotime($value2->getFechaEntrega()) < strtotime(date("Y-m-d"))) {
                    if($value2->getFechaEntrega() != '0000-00-00') {
                        echo "<tr class='alert alert-error'>";
                    } else {
                        echo "<tr>\n";
                    }
                } else {
                    echo "<tr>\n";
                }
                echo "<td>".$value2->getCantidad()."</td>\n";
                echo "<td>".$value2->getArticulo()->getCodigo()."</td>\n";
                echo "<td>".$value2->getArticulo()->getMarca()->getNombre()."</td>\n";
                echo "<td><div style='text-align: right;'>".number_format($value2->getPrecio(), 2, $dec_point, $thousands_sep)."</div></td>\n";
                echo "<td>";
                if($value2->getFechaEntrega() != '0000-00-00') {
                    $fecha = explode('-', $value2->getFechaEntrega());
                    echo $fecha[2]."/".$fecha[1]."/".$fecha[0];
                } else {
                    echo "&nbsp;";
                }
                echo "</td>\n";
                echo "<td>".$value2->getProveedor()->getNombre()."</td>\n";
                echo "</tr>\n";
            }
        }
    }
    echo "</table>\n";
}

function getPedidosPendientesConItemsVencidos() {
    $idPedidos = ORMGetIdPedidosConItemsPendientesVencidos();
    
    $pedidos = array();
    foreach ($idPedidos as $key => $value) {
        $pedidos[] = getPedidoPorId($value);
    }
    echo "<table class='table table-condensed'>\n";
    foreach ($pedidos as $key => $value) {
        $items = $value->getItems();
        
        $hayPendientes = false;
        foreach ($items as $key2 => $value2) {
            if(strtotime($value2->getFechaEntrega()) < strtotime(date("Y-m-d"))) {
                    if($value2->getFechaEntrega() != '0000-00-00') {
                        $hayPendientes = true;
                    } 
                } 
        }
        
        if($hayPendientes) {
            echo "<tr class='success'>\n";
            echo "<td><b>".$value->getNumero()."</b></td>\n";
            echo "<td><b>".$value->getCliente()->getNombre()."</b></td>\n";
            echo "<td><b>O/C: ".$value->getOrdenDeCompra()."</b></td>\n";
            echo "<td><b></b></td>\n";
            echo "<td><b>".$value->getMoneda()->getMoneda()."</b></td>\n";
            echo "<td><b></b></td>\n";
            echo "</tr>\n";

            $items = $value->getItems();

            foreach ($items as $key2 => $value2) {
                if($value2->getIdOrdenDeCompra() == 0) {
                    if(strtotime($value2->getFechaEntrega()) < strtotime(date("Y-m-d"))) {
                        if($value2->getFechaEntrega() != '0000-00-00') {
                            echo "<tr class='alert alert-error'>";
                        } else {
                            echo "<tr>\n";
                        }
                    } else {
                        echo "<tr>\n";
                    }
                    echo "<td>".$value2->getCantidad()."</td>\n";
                    echo "<td>".$value2->getArticulo()->getCodigo()."</td>\n";
                    echo "<td>".$value2->getArticulo()->getMarca()->getNombre()."</td>\n";
                    echo "<td><div style='text-align: right;'>".number_format($value2->getPrecio(), 2, $dec_point, $thousands_sep)."</div></td>\n";
                    echo "<td>";
                    if($value2->getFechaEntrega() != '0000-00-00') {
                        $fecha = explode('-', $value2->getFechaEntrega());
                        echo $fecha[2]."/".$fecha[1]."/".$fecha[0];
                    } else {
                        echo "&nbsp;";
                    }
                    echo "</td>\n";
                    echo "<td>".$value2->getProveedor()->getNombre()."</td>\n";
                    echo "</tr>\n";
                }
            }
        }
    }
    echo "</table>\n";
}

function getPedidosPorProveedor() {
    $proveedores = ORMGetProveedores();
    foreach ($proveedores as $key => $value) {
        echo "<b>".$value."</b><br />";
        $items = ORMGetItemsPorProveedorSinOrdenDeCompra($key);
        echo "<table class='table table-striped table-condensed'>\n";
        foreach ($items as $key2 => $value2) {
            echo "<tr>\n";
            $item = getItemPedidoPorId($value2);
            echo "<td>".$item->getCantidad()."</td>\n";
            echo "<td>".$item->getArticulo()->getCodigo()."</td>\n";
            $idPedido = ORMGetIdPedidoPorIdItem($item->getIdItemPedido());
            $pedido = getPedidoPorId($idPedido);
            echo "<td>P.Vta: ".$pedido->getMoneda()->getSimbolo()." ".number_format($item->getPrecio(), 2)."</td>\n";
            echo "<td>";
            if($item->getFechaEntrega() != '0000-00-00') {
                $fecha = explode('-', $item->getFechaEntrega());
                echo $fecha[2]."/".$fecha[1]."/".$fecha[0];
            } else {
                echo "&nbsp;";
            }
            echo "</td>\n";
            echo "<td>Pedido: ".$pedido->getNumero()."</td>\n";
            echo "</tr>\n";
        }
        echo "</table>\n";
    }
        
        echo "<b>SIN PROVEEDOR</b><br />\n";
        $items = ORMGetItemsPorProveedorSinOrdenDeCompra(0);
        echo "<table class='table table-striped table-condensed'>\n";
        foreach ($items as $key2 => $value2) {
            echo "<tr>\n";
            $item = getItemPedidoPorId($value2);
            echo "<td>".$item->getCantidad()."</td>\n";
            echo "<td>".$item->getArticulo()->getCodigo()."</td>\n";
            $idPedido = ORMGetIdPedidoPorIdItem($item->getIdItemPedido());
            $pedido = getPedidoPorId($idPedido);
            echo "<td>P.Vta: ".$pedido->getMoneda()->getSimbolo()." ".number_format($item->getPrecio(), 2)."</td>\n";
            echo "<td>";
            if($item->getFechaEntrega() != '0000-00-00') {
                $fecha = explode('-', $item->getFechaEntrega());
                echo $fecha[2]."/".$fecha[1]."/".$fecha[0];
            } else {
                echo "&nbsp;";
            }
            echo "</td>\n";
            echo "<td>Pedido: ".$pedido->getNumero()."</td>\n";
            echo "</tr>\n";
        }
        echo "</table>\n";
}

?>
